namespace my_map 
{
    template<class K, class V>
    class map 
    {
        struct KeyOfMap 
        {
            const K& operator()(const pair<K, V>& kv)
            {
                return kv.first;
            }
        };
    public:

        typedef typename RBTree<K, pair<K, V>, KeyOfMap>::iterator iterator;
        
        iterator begin() { return _tree.begin(); }
        iterator end() { return _tree.end(); }
        pair<iterator, bool> insert(const pair<K, V>& kv)
        {
            return _tree.insert(kv);
        }
        V& operator[](const K& k)
        {
            pair<iterator, bool> ret = insert(make_pair(k, V()));
            return (ret.first)->second;
        }

    private:
        RBTree<K, pair<K, V>, KeyOfMap> _tree;
    };
}
